In [2]:
%%HTML
<link rel='stylesheet' href='./src/desafioICEI.css'>
In [3]:
import json
#from urllib.request import urlopen
import pandas as pd
import matplotlib.pyplot as plt
import plotly
import plotly.express as px
import seaborn as sns
from IPython.display import Markdown
#from ipywidgets import interact, interactive, fixed, interact_manual
#import ipywidgets as widgets
import Leonardo_FuncoesGenericas as lf
import plotly.io as pio
pio.renderers.default='notebook'

plotly.offline.init_notebook_mode()

df = pd.read_csv("./src/APobrezaInfantilEmMinasGerais.csv")
geojson = json.load(open("./src/geojson_MG_simplificado_100_vezes.json"))

Banner 1° Desafio de Ciência de Dados PUC Minas

A Pobreza Infantil em Minas Gerais (IBGE 2010)¶

Autor: Leonardo Ribeiro Andrade

Curso: Sistemas de Informação

  • A Pobreza Infantil em Minas Gerais (IBGE 2010))
    • 1. Introdução
      • Tabela - Ferramentas Utilizadas
      • Tabela - Atributos da Base de Dados
    • 2. Visualizações
      • 2.1 Tabela - Amostragem dos dados
      • 2.2 Barras - Os 10 Municípios Com Maior Quantidade de Crianças Pobres ou Vulneráveis
      • 2.3 Mapa Coroplético - Quantidade de crianças pobres ou vulneráveis Por Município
      • 2.4 Mapa Coroplético - Porcentagem de Crianças Pobres ou Vulneráveis Por Município
      • 2.5 Mapa de Calor - Relação Entre Pobreza Infantil e Habitantes
    • 3. Análise

1. Introdução

(Este documento é uma Análise Exploratória de Dados do censo IBGE 2010, com foco nos municípios de Minas Gerais. Foi desenvolvido como entrega para o 1° Desafio de Ciência de Dados PUC Minas. Recomenda-se sua visualização através do Google Chrome)

Com mais de 2,5 milhões de habitantes, o estado de Minas Gerais é o 2° mais populoso de todo o país, mas será que seu PIB de 258 bilhões alcança suas crianças de maneira igual, permitindo um futuro justo para as próximas gerações?

Com o seguinte documento, o objetivo é averiguar como a pobreza infantil afeta os municípios de Minas Gerais e quais aqueles mais carentes e necessitados de intervenção.

Tabela - Ferramentas Utilizadas¶

Ferramenta Tipo Uso
JupyterLab Aplicação Web em servidor local Ambiente de manipulação, visualização, e exportação dos dados
Python Linguagem de Programação Ferramenta base para as bibliotes de manipulação e visualização
Pandas Biblioteca Python Manipulação dos dados
Plotly Express Biblioteca Python Visualização e exportação interativa dos dados
CSS Linguagem de Estilos Estilizar o documento
Google Sheets Aplicação Web Visita inicial aos dados e criação dos novos atributos/colunas
geodata-br Repositório Obtenção do arquivo GeoJSON do estado de Minas Gerais
MapShaper Aplicação Web Simplificação do arquivo GeoJson
BitDownTOC Aplicação Web Criação do índice do documento

Tabela - Atributos da Base de Dados¶

Atributo Significado
municipio Nome do município
domicilios Número de domicílios
domicilios_crianca_fora_da_escola Domicílio com pelo menos uma pessoa com idade entre 6 e 17 anos que não frequenta escola
domicilios_crianca_com_distorcao_escolar Domicílio com pelo menos uma pessoa com idade entre 8 e 17 anos com 2 ou mais anos de idade acima do recomendado para a série/ano que está cursando
domicilios_com_trabalho_infantil Domicílio em que pelo menos uma criança de 10 a 15 anos estava trabalhando na semana de referência
criancas_ate_11_anos Número de crianças de com idade de 0 a 11 anos
criancas_ate_11_anos_pobres_vulneraveis Número de crianças de 0 a 11 anos pobres ou vulneráveis
porcentagem_domicilios_crianca_fora_da_escola Porcentagem de domicílios com crianças de 6 a 17 que não frequentam a escola (comparado com o atributo domicilios)
porcentagem_domicilios_crianca_com_distorcao_escolar Porcentagem de domicílios com crianças de 8 a 17 com distorção escolar de 2 oau mais anos (comparado com o atributo domicilios)
porcentagem_domicilios_trabalho_infantil Porcentagem de domicílios com crianças de 8 a 17 com distorção escolar de 2 ou mais anos (comparado com o atributo domicilios)
habitantes_aproximacao Aproximação do número de habitantes multiplicando o atributo domicilios com a média de moradores por domicílios levantado pelo IBGE em 2010 (3,31)
gini Índice de GINI do estado calculado pelo censo IBGE 2010

2. Visualizações¶

Tabela - Amostragem dos dados¶

In [4]:
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 853 entries, 0 to 852
Data columns (total 13 columns):
 #   Column                                             Non-Null Count  Dtype  
---  ------                                             --------------  -----  
 0   municipio                                          853 non-null    object 
 1   domicilios                                         853 non-null    int64  
 2   domicilios_crianca_fora_da_escola                  853 non-null    int64  
 3   domicilios_crianca_com_distorcao_escolar           853 non-null    int64  
 4   domicilios_com_trabalho_infantil                   853 non-null    int64  
 5   criancas_ate_11_anos                               853 non-null    int64  
 6   criancas_ate_11_anos_pobres_vulneraveis            853 non-null    int64  
 7   porcentagem_domicilios_crianca_fora_da_escola      853 non-null    float64
 8   porcentagem_domicilios_crianca_com_atraso_escolar  853 non-null    float64
 9   porcentagem_domicilios_trabalho_infantil           853 non-null    float64
 10  porcentagem_criancas_pobres_vulneraveis            853 non-null    float64
 11  habitantes_aproximacao                             853 non-null    int64  
 12  gini                                               853 non-null    float64
dtypes: float64(5), int64(7), object(1)
memory usage: 86.8+ KB
In [5]:
df.sort_values(by="habitantes_aproximacao", ascending=False).head(10)
Out[5]:
municipio domicilios domicilios_crianca_fora_da_escola domicilios_crianca_com_distorcao_escolar domicilios_com_trabalho_infantil criancas_ate_11_anos criancas_ate_11_anos_pobres_vulneraveis porcentagem_domicilios_crianca_fora_da_escola porcentagem_domicilios_crianca_com_atraso_escolar porcentagem_domicilios_trabalho_infantil porcentagem_criancas_pobres_vulneraveis habitantes_aproximacao gini
65 Belo Horizonte 768685 3153 5539 1968 347804 44869 0.4102 0.7206 0.2560 12.9007 2544347 0.6106
824 Uberlândia 198156 1375 1994 575 98305 11743 0.6939 1.0063 0.2902 11.9455 655896 0.5122
205 Contagem 187429 1310 2115 588 100940 15460 0.6989 1.1284 0.3137 15.3160 620390 0.4953
418 Juiz de Fora 172973 1297 2375 735 75207 13559 0.7498 1.3730 0.4249 18.0289 572541 0.5655
71 Betim 113785 1089 1848 499 72464 14798 0.9571 1.6241 0.4385 20.4212 376628 0.4840
500 Montes Claros 105295 1091 1761 629 65779 17450 1.0361 1.6724 0.5974 26.5282 348526 0.5391
823 Uberaba 99584 370 970 303 44836 7008 0.3715 0.9741 0.3043 15.6303 329623 0.5052
636 Ribeirão das Neves 89483 1328 1945 411 59422 18059 1.4841 2.1736 0.4593 30.3911 296189 0.4080
314 Governador Valadares 83051 830 1509 418 47619 10978 0.9994 1.8170 0.5033 23.0538 274899 0.5377
356 Ipatinga 73726 574 663 198 40334 6223 0.7786 0.8993 0.2686 15.4287 244033 0.5236

Barras - Os 10 Municípios Com Maior Quantidade de Crianças Pobres ou Vulneráveis¶

In [6]:
%%capture

# def f(municipios=5, asc=False):
#     temp = df.sort_values(by="criancas_ate_11_anos_pobres_vulneraveis", ascending=asc).head(municipios)
#     fig = px.bar(temp,
#                  x="municipio",
#                  y="criancas_ate_11_anos_pobres_vulneraveis",
#                  labels={"municipio" : "Município", "criancas_ate_11_anos_pobres_vulneraveis" : "Crianças"},
#                  hover_name="municipio",
#                  color="criancas_ate_11_anos_pobres_vulneraveis",
#                  orientation="v",
#                  range_color=[0, 30000],
#                  color_continuous_scale=["gray", "red"])
        
#     fig.show()

# interact(f, municipios=widgets.IntText(description="Quantidade de municípios", value=5),
#              asc=widgets.Checkbox(description="Crescente", value=False))
In [7]:
temp = df.sort_values(by="criancas_ate_11_anos_pobres_vulneraveis", ascending=False).head(10)

#lf.barras(temp, y="criancas_ate_11_anos_pobres_vulneraveis", range_color=[0, 30000], labels={"municipio" : "Município", "criancas_ate_11_anos_pobres_vulneraveis" : "Crianças"})

fig = px.bar(temp,
             x="municipio",
             y="criancas_ate_11_anos_pobres_vulneraveis",
             labels={"municipio" : "Município", "criancas_ate_11_anos_pobres_vulneraveis" : "Crianças"},
             hover_name="municipio",
             color="criancas_ate_11_anos_pobres_vulneraveis",
             orientation="v",
             range_color=[0, 30000],
             text_auto=True,
             color_continuous_scale=["gray", "red"])
    
fig.update_layout(dragmode=False)

fig.show(config={"displayModeBar" : False})
In [8]:
# temp = temp = df.sort_values(by="criancas_ate_11_anos_pobres_vulneraveis", ascending=False).head(6)
# chart = sns.barplot(temp, x="municipio", y="criancas_ate_11_anos_pobres_vulneraveis")
# plt.xticks(rotation=330, ha="left",rotation_mode='anchor')
# #chart.set_xticklabels(chart.get_xticklabels(), rotation=30)
# plt.tight_layout()

Mapa Coroplético - Quantidade de crianças pobres ou vulneráveis Por Município¶

In [9]:
temp = df.sort_values(by=["municipio"])

fig = px.choropleth_mapbox(temp,
                           mapbox_style="carto-positron",
                           geojson=geojson,
                           featureidkey="properties.name",
                           locations="municipio",
                           color="criancas_ate_11_anos_pobres_vulneraveis",
                           color_continuous_scale=[(0.00, "goldenrod"),
                                                   (0.25, "goldenrod"),
                                                   (0.25, "yellow"),
                                                   (0.50, "yellow"),
                                                   (0.50, "orangered"),
                                                   (0.75, "orangered"),
                                                   (0.75, "red"),
                                                   (1.00, "red")],
                           range_color=(0, 10000),
                           #color_discrete_map={'High':'red', 'Moderate':'Yellow','Low':'Green'},
                           zoom=4.5,
                           center={"lat":-18.56647372590101, "lon": -44.554648114723946})

fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})

fig.update_layout(coloraxis_colorbar=dict(
    title="Quantidade",
    tickvals=[2500-1250,5000-1250,7500-1250,10000-1250],
    ticktext=["Menos de 2.500","2.500 a 5.000","5.000 a 7.500", "Mais de 10.000"],
))

fig.show()

Mapa Coroplético - Porcentagem de Crianças Pobres ou Vulneráveis Por Município¶

In [10]:
temp = df.sort_values(by=["municipio"])
fig = px.choropleth_mapbox(temp,
                           mapbox_style="carto-positron",
                           geojson=geojson,
                           featureidkey="properties.name",
                           locations="municipio",
                           color="porcentagem_criancas_pobres_vulneraveis",
                           color_continuous_scale=[(0.00, "goldenrod"),
                                                   (0.25, "goldenrod"),
                                                   (0.25, "yellow"),
                                                   (0.50, "yellow"),
                                                   (0.50, "orangered"),
                                                   (0.75, "orangered"),
                                                   (0.75, "red"),
                                                   (1.00, "red")],
                           range_color=(0.00, 100.00),
                           #color_discrete_map={'High':'red', 'Moderate':'Yellow','Low':'Green'},
                           zoom=4.5,
                           center={"lat":-18.56647372590101, "lon": -44.554648114723946})

fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})

fig.update_layout(coloraxis_colorbar=dict(
    title="Quantidade",
    tickvals=[25-12.5,50-12.5,75-12.5,100-12.5],
    ticktext=["menos de 25%","25% a 50%","50% a 75%", "Mais de 75%"]
))

fig.show()

Mapa de Calor - Relação Entre Pobreza Infantil e Habitantes¶

In [11]:
#temp1 = df.iloc[0].corr(numeric_only=True)
temp = df.iloc[:,[6, 10, 3, 2, 1]]
temp = temp.corr(numeric_only=True).iloc[:, [0,1]]
temp = temp.drop(index=["criancas_ate_11_anos_pobres_vulneraveis", "porcentagem_criancas_pobres_vulneraveis"])

sns.heatmap(temp, annot=True, center=0.5, cmap="mako", linewidths=1, linecolor="lightgreen", )
Out[11]:
<Axes: >
No description has been provided for this image

3. Análise¶

Com os dados avaliados, pode-se concluir que a pobreza infantil em 2010 fazia parte da vida de inúmeras crianças de 0 a 11 anos, atingindo cerca de 34,1% destas em Minas Gerais. Como apresentam as visualizações de mapa, as pequenas cidades ao nordeste do estado, ainda que não sejam tão populosas quanto as centrais, são as mais afetadas e prejudicadas, sofrendo com altos índices de pobreza infantil em relação a sua população de crianças.

Com a visualização Mapa de Calor, Podemos notar como a porcentagem de crianças pobres ou vulneráveis possui uma relação levemente inversa quanto ao número de habitantes de um dado município, evidenciando novamente como os municípios menores são geralmente os mais afetados.